package com.ruoyi.trainingManagement.mapper;

import java.util.List;
import com.ruoyi.trainingManagement.domain.CourseStudentInfo;
import org.apache.ibatis.annotations.Param;

/**
 * 课程学生信息Mapper接口
 * 
 * @author chenxl
 * @date 2025-06-18
 */
public interface CourseStudentInfoMapper 
{
    /**
     * 查询课程学生信息
     * 
     * @param id 课程学生信息主键
     * @return 课程学生信息
     */
    public CourseStudentInfo selectCourseStudentInfoById(String id);

    /**
     * 查询课程学生信息列表
     * 
     * @param courseStudentInfo 课程学生信息
     * @return 课程学生信息集合
     */
    public List<CourseStudentInfo> selectCourseStudentInfoList(CourseStudentInfo courseStudentInfo);

    /**
     * 新增课程学生信息
     * 
     * @param courseStudentInfo 课程学生信息
     * @return 结果
     */
    public int insertCourseStudentInfo(CourseStudentInfo courseStudentInfo);

    /**
     * 修改课程学生信息
     * 
     * @param courseStudentInfo 课程学生信息
     * @return 结果
     */
    public int updateCourseStudentInfo(CourseStudentInfo courseStudentInfo);

    /**
     * 删除课程学生信息
     * 
     * @param id 课程学生信息主键
     * @return 结果
     */
    public int deleteCourseStudentInfoById(String id);

    /**
     * 批量删除课程学生信息
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCourseStudentInfoByIds(String[] ids);

    public int batchInsert(List<CourseStudentInfo> courseStudentList);

    public List<CourseStudentInfo> selectByCourseScheduleDetailsId(String courseScheduleDetailsId);

    /**
     * 根据学生ID列表查询不重复的课程排课ID
     * @param studentIds 学生ID列表
     * @return 不重复的course_schedule_details_id列表
     */
    List<String> selectDistinctCourseScheduleIdsByStudentIds(@Param("studentIds") List<String> studentIds);

    /**
     * 根据课程安排详情ID查询学生ID列表（仅查询已选课状态）
     *
     * @param courseScheduleDetailsId 课程安排详情ID
     * @return 学生ID列表
     */
    public List<String> selectStudentIdsByCourseScheduleDetailsId(@Param("courseScheduleDetailsId") String courseScheduleDetailsId);

    /**
     * 批量更新课程学生信息的排课详情ID
     * @param targetCourseScheduleDetailsId 目标排课详情ID（要更新成的值）
     * @param courseStudentInfoList 待更新的课程学生信息列表（需包含主键id）
     * @return 影响行数
     */
    int batchUpdateCourseScheduleDetailsId(
            @Param("targetCourseScheduleDetailsId") String targetCourseScheduleDetailsId,
            @Param("courseStudentInfoList") List<CourseStudentInfo> courseStudentInfoList
    );

    /**
     * 根据课程班ID和学生ID查询记录
     * @param courseStudentInfo 包含courseScheduleDetailsId和studentId的条件对象
     * @return 匹配的记录，无匹配时返回null
     */
    CourseStudentInfo selectByCourseScheduleAndStudent(CourseStudentInfo courseStudentInfo);

}
